import Global from './global';

export const reg = {
    mobile: /^[1][3,4,5,6,7,8,9][0-9]{9}$/,
}

/**
 * 手机号码格式验证
 * @param rule 验证规则
 * @param value 需要验证的值
 * @param callback 回调函数
 */
export const validateMobile = (rule, value, callback) => {
    if (!reg.mobile.test(value)) {
        callback(new Error('手机号码格式错误'))
    } else {
        callback()
    }
};


/**
 * 座机号码验证
 * @param rule 验证规则：符合格式(XXXX-XXXXXXX，XXXX-XXXXXXXX，XXX-XXXXXXX，XXX-XXXXXXXX，XXXXXXX，XXXXXXXX)
 * @param value 需要验证的值
 * @param callback 回调函数
 */
export const validateTelephone = (rule, value, callback) => {
    const reg = /^(\d{3,4}-)?\d{7,8}$/;
    if (!reg.test(value)) {
        callback(new Error("座机号码格式错误"))
    } else {
        callback()
    }
};


/**
 * 手机或座机号码验证
 * @param rule 验证规则
 * @param value 需要验证的值
 * @param callback 回调函数
 */
export const validatePhoneNumber = (rule, value, callback) => {
    const reg = /^(((\d{3,4}-)?\d{7,8})|([1][3,4,5,6,7,8,9][0-9]{9}))$/;
    if (!reg.test(value)) {
        callback(new Error("手机或座机号码格式错误"))
    } else {
        callback()
    }
};



/**
 * 二次确认密码验证
 * @param rule 验证规则
 * @param value 需要验证的值
 * @param callback 回调函数
 * @param pwd 密码
 */
export const validateNoPwd = (rule, value, callback, pwd) => {
    if (value != pwd) {
        callback(new Error("两次输入的密码不一致，请重新输入"))
    } else {
        callback()
    }
};


/**
 * 身份证号码验证
 * @param rule 验证规则（是否满足18位）
 * @param value 需要验证的值
 * @param callback 回调函数
 */
export const validateIDCard = (rule, value, callback) => {
    const reg = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
    if (!reg.test(value)) {
        callback(new Error("身份证号码格式错误"))
    } else {
        callback()
    }
};


/**
 * 邮箱验证
 * @param rule 验证规则
 * @param value 需要验证的值
 * @param callback 回调函数
 */
export const validateMail = (rule, value, callback) => {
    const reg = /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/;
    if (!reg.test(value)) {
        callback(new Error("邮箱格式错误"))
    } else {
        callback()
    }
};


/**
 * 社会信用代码验证
 * @param rule 验证规则：大写字母+数字的18位字符
 * @param value 需要验证的值
 * @param callback 回调函数
 */
export const validateCreditCode = (rule, value, callback) => {
    const reg = /^[0-9A-Z]{18}$/;
    if (!reg.test(value)) {
        callback(new Error("社会信用代码格式错误"))
    } else {
        callback()
    }
};

/**
 * 链接验证
 * @param rule 验证规则：大写字母+数字的18位字符
 * @param value 需要验证的值
 * @param callback 回调函数
 */
export const validateLinkUrl = (rule, value, callback) => {
    const reg = /((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/;
    if (!reg.test(value)) {
        callback(new Error("链接格式错误"))
    } else {
        callback()
    }
};

/**
 * 数字格式验证
 * @param rule 验证规则，可保留俩位小数
 * @param value 需要验证的值
 * @param callback 回调函数
 */
export const validateNumber = (rule, value, callback) => {
    var reg = /^[0-9]+((.[0-9]{1})|(.[0-9]{2}))?$/;

    if (!reg.test(value)) {
        callback(new Error('请输入正确的数字'))
    } else if (value <= 0) {
        callback(new Error('请输入大于0的数字'))
    } else {
        callback()
    }
};


/**
 * 等保需求定制：强密码验证
 * @param rule 验证规则
 * @param value 需要验证的值
 * @param callback 回调函数
 */
export const validatePwdBySave = (rule, value, callback) => {
    // 至少包含大写字母+小写字母+下划线
    let reg = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*_)[A-Za-z\d_]{8,20}/;
    if (Global.isSave) { // 等保强密码验证
        if (value && value.length < 8 || value.length > 20) {
            callback("请输入正确的8-20位密码")
        } else if (value && !reg.test(value)) {
            callback('密码组合需含大小写字母 +下划线 “_”  + 数字')
        } else {
            callback()
        }
    } else { // 普通密码验证
        if (value && value.length < 6 || value.length > 20) {
            callback('请输入6-20位正确密码')
        } else {
            callback();
        }
    }
};